05. 合并
注意,主题分支(例如
sidebar
)的作用是让你做出不影响
master
分支的更改。当你在主题分支上做出更改后,如果觉得不想要该分支上的更改,则可以删掉该分支,或者你决定要保留更改,则可以将该分支上的更改与其他分支上的更改合并。
将分支组合到一起称为 合并 。
git 可以自动将不同分支上的更改合并到一起。这种分支和合并功能正是 git 的强大之处!你可以在分支上做出小的或大的更改,然后使用 git 合并这些更改。
我们来看看理论原理。注意 git 中的两种合并:普通 合并 和 快进合并 。
Nd016 WebND Ud123 Gitcourse BETAMOJITO L5 71 合并
快速检查
Task Description:
我们快速检查下我们的起点是否一样。请检查以下各项:
Task Feedback:
我们开始吧!
⚠️ 了解分支 ⚠️
当你要合并分支时,务必知道当前位于哪个分支上。注意,合并分支会提交 commit。
现在我们不知道如何撤消更改。下节课将介绍这一技巧,但是如果你在错误的分支上进行了合并,可以使用以下命令撤消合并:
git reset --hard HEAD^
(确保包含
^字符!它属于“相对 commit 引用”并表示“父 级 commit”。我们将在下节课学习相对 commit 引用。)
合并指令
git merge
指令用来合并 git 分支:
$ git merge <name-of-branch-to-merge-in>
发生合并时,git 将:
-
查看将合并的分支
-
查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit
-
将单个分支上更改的代码行合并到一起
-
提交一个 commit 来记录合并操作
快进合并
在我们的项目中,我们检出了
master
分支,我希望它拥有
footer
分支上的更改。用语言描述的话就是“我想要合并
footer
分支。”。注意表述“合并…”;在进行合并时,另一个分支上的更改将出现在当前检出的分支上。
我再强调下,当我们合并时,我们将其他分支合并到当前(检出的)分支上。我们不是将两个分支合并到一个新的分支上。也不是将当前分支合并到其他分支上。
因为
footer
直接在
master
前面,因此这种合并最简单。将
footer
合并到
master
中将导致
快进合并
(Fast-forward merge)。快进合并将使当前检出的分支向前移动,直到它指向与另一个分支(这里是
footer
)指向的 commit 一样为止。
要合并
footer
分支,运行:
$ git merge footer
在运行该命令后,我的终端显示结果如下所示:
终端显示了将
footer
分支合并到
master
分支后的结果。
分支位于同一个位置?
SOLUTION:
是## 进行普通合并
终于完成快进合并流程了!也没那么难,对吧?
但是你可能会说“当然简单了,所有 commit 都已经在那,分支指针只是向前移动了!”…说的对,这是最简单的合并。
现在我们将进行更常见的合并,其中两个分支完全不一样。你会惊讶地发现,实际合并
sidebar
这样的独特分支,操作是完全一样的!
要合并
sidebar
分支,确保你位于
master
分支上,并运行:
$ git merge sidebar
因为合并的是两个完全不一样的分支,因此将提交 commit。在进行 commit 时,需要提供 commit 消息。因为这是合并 commit,因此已经提供了默认消息。你也可以更改消息,但通常都会直接使用默认的合并 commit 消息。因此当你的代码编辑器打开并包含该消息时,直接关闭编辑器以确认使用该 commit 消息。
在使用默认 commit 消息后,我的终端如下所示:
终端显示了合并
sidebar
分支后的结果。
就这么多合并操作!很简单吧?你可能读过很多让分支和合并显得非常复杂的文档,但实际上并没有那么难。
哪个分支会移动?
SOLUTION:
allisons-mobile-footer-fix如果合并失败了呢?
我们刚刚执行的合并能够成功合并。git 能够灵活地合并不同分支上的大量工作。但是,有时候也无法合并分支。如果在进行合并时失败了,则称为 合并冲突(merge conflict) 。我们将在下节课了解合并冲突及其背后的原因,并学习如何解决冲突。